package work3_3;

public class MyStack {
    //存数组元素
    private Object[] objs;
    //存储元素的个数
    private int size;
    //默认数组长度
    private static final int DEFAULT_LENGTH=10;
    //无参构造
    public MyStack(){
        objs=new Object[DEFAULT_LENGTH];
    }
    //有参构造
    public MyStack(int size) throws IllegalAccessException {
        if(size<0){
            throw new IllegalAccessException("栈的大小不能为负数："+size);
        }
        objs=new Object[size];
    }
    /**
     * 入栈
     */
    public Object push(Object element){
        //判断栈的内存够不够
        if((size+1)==objs.length){
            //扩容
            grow();
        }
        objs[size++]=element;
        return element;
    }
    //扩容方法
    private void grow() {
        Object[] objs1=new Object[objs.length*2];
        System.arraycopy(objs,0,objs1,0,objs.length);
        objs=objs1;
    }
    //删除栈顶元素，并返回
    public Object pop(){
        //检查栈里面的元素
        check();
        //从栈中取元素
        Object obj=objs[size-1];
        //从栈顶元素删除
        objs[--size]=null;
        return obj;
    }

    private void check() {
        if(isEmpty()){
            throw new RuntimeException("栈中没有元素");
        }
    }

    boolean isEmpty() {
        return size==0;
    }
    //元素的个数
    public int size(){
        return this.size;
    }
    //返回栈顶元素
    public Object peek(){
        check();
        return objs[size-1];
    }
    //查找元素
    public int search(Object obj){
        for (int i = 0; i < size; i++) {
            if(objs[i]==null){
                if(objs[i]==obj){
                    return 1;
                }
            } else if (objs[i].equals(obj)) {
                return i;
            }
        }
        return -1;
    }

}


